package com.bill99.golden.inf.sso.client;

import javax.servlet.http.HttpServletRequest;

import com.bill99.golden.inf.sso.mdp.dto.RefreshTokenTimeRequestDto;
import com.bill99.golden.inf.sso.mdp.dto.ValidateTokenResponseDto;

public interface IssoClient {
	String SSO_INFO_NAME = "SSO_INFO_NAME@99bill.com";

	/**
	 * 注册SSO登录
	 * 
	 * @param request
	 *            用户请求对象
	 * @param appCode
	 *            系统代码，只用于日志跟踪用途
	 * @param userId
	 *            用户ID
	 * @param userCode
	 *            用户代码
	 * @param userName
	 *            用户名称
	 * @param orgId
	 *            组织ID
	 * @param orgCode
	 *            组织代码
	 * @param orgName
	 *            组织名称
	 * @param departmentId
	 *            部门ID
	 * @param departmentCode
	 *            部门代码
	 * @param departmentName
	 *            部门名称
	 * @param memo
	 *            备注
	 * @return 成功则返回SSO令牌，如果有错误则返回null或者抛出异常
	 */
	public String registerSSO(HttpServletRequest request, String appCode,
			String userId, String userCode, String userName, String orgId,
			String orgCode, String orgName, String departmentId,
			String departmentCode, String departmentName, String memo);

	/**
	 * 验证SSO登录
	 * 
	 * @param request
	 * @param token
	 * @param appCode
	 * @return
	 */
	public ValidateTokenResponseDto validateSSO(HttpServletRequest request,
			String token, String appCode);

	/**
	 * 注销SSO登录
	 * 
	 * @param request
	 *            用户请求对象
	 * @param token
	 *            SSO令牌
	 * @param appCode
	 *            系统代码，只用于日志跟踪用途
	 */
	public void destroySSO(HttpServletRequest request, String token,
			String appCode);

	/**
	 * 刷新token访问时间
	 * 
	 * @param request
	 *            用户请求对象
	 * @param token
	 *            SSO令牌
	 * @param appCode
	 *            系统代码
	 * @param timeSpan
	 *            与当前时间的差值（毫秒）
	 */
	public void refreshTokenTime(RefreshTokenTimeRequestDto r);
}
